#include <iostream>
#include <fstream>
#include <assert.h>
#include <cstdlib>
#include <cstring>

// Notar que el bloque tendrá un tamaño de: sizeof(int) bytes + STRING_MAX_SIZE bytes.
#define STRING_MAX_SIZE 30

using namespace std;

int main( int argc, char* argv[] )
{

    if ( argc != 3 )
    {
        cerr<<"Argumentos inválidos. Uso: text2bin [inputfile] [outputfile]."<<endl;
        return 1;
    }

    srand( 0 );
    ifstream infile( argv[1] );
    ofstream outfile( argv[2] );
    string buffer;
    int random;
    char cstr[STRING_MAX_SIZE];
#ifdef DEBUG	
    int i = 0x31323334;
#endif

    while ( infile.good() && infile >> buffer )
    {
        // Asigno un random
#ifdef DEBUG	
	random = i;
	i++;
#else
        random = rand();
#endif

	// Leo la palabra y la copio en un cstring para evitar problemas de acceso inválido a memoria cuando escriba de a STRING_MAX_SIZE characteres.
        assert ( buffer.length()<STRING_MAX_SIZE );
        strcpy ( cstr, buffer.c_str() );
        
        outfile.write( (char*)&random, sizeof(int) );
        outfile.write( cstr, STRING_MAX_SIZE );
    }

    infile.close();
    outfile.close();
    return 0;
    
}
